Описание/Пошаговая инструкция выполнения домашнего задания:
Необходимо:

установить MongoDB одним из способов: ВМ, докер;
заполнить данными;
написать несколько запросов на выборку и обновление данных
Сдача ДЗ осуществляется в виде миниотчета.



1. Создаем файл docker-compose.yaml:
              version: '3.9'

              services:
                mongo-test:
                  image: mongo

                  tty: true
                  stdin_open: true
                  restart: "unless-stopped"

                  environment:
                    - MONGO_INITDB_ROOT_USERNAME=otus
                    - MONGO_INITDB_ROOT_PASSWORD=otusSuperPass
                  ports:
                    - 27018:27017
2. Запустим как демона
docker-compose  up -d
3. подключимся к контейнеру и проверим

    homework2 % docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS          PORTS                      NAMES
    3f629259d47f   mongo     "docker-entrypoint.s…"   13 days ago   Up 35 seconds   0.0.0.0:27018->27017/tcp   homework2-mongo-test-1

    homework2 % docker exec -it homework2-mongo-test-1 bash

    root@3f629259d47f:/# mongod --version
    db version v7.0.2
    Build Info: {
        "version": "7.0.2",
        "gitVersion": "02b3c655e1302209ef046da6ba3ef6749dd0b62a",
        "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
        "modules": [],
        "allocator": "tcmalloc",
        "environment": {
            "distmod": "ubuntu2204",
            "distarch": "aarch64",
            "target_arch": "aarch64"
        }
    root@3f629259d47f:/# mongosh -u otus -p otusSuperPass
    Current Mongosh Log ID:	654b212e4c8d083fb46f1864
    Connecting to:		mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.0.1
    Using MongoDB:		7.0.2
    Using Mongosh:		2.0.1
4. Заливаем тестовыми данными
git clone https://github.com/neelabalan/mongodb-sample-dataset.git
cd ./mongodb-sample-dataset
chmod a+x script.sh
./script.sh localhost 27018 otus otusSuperPass

Наблюдаем успешное залитие данными:
    ...
    2023-11-08T09:10:20.392+0300	29470 document(s) imported successfully. 0 document(s) failed to import.
    sample_weatherdata
    2023-11-08T09:10:20.410+0300	connected to: mongodb://localhost:27018/
    2023-11-08T09:10:20.410+0300	dropping: sample_weatherdata.data
    2023-11-08T09:10:21.229+0300	10000 document(s) imported successfully. 0 document(s) failed to import.

Подключаемся в бд:
mongosh localhost:27018 -u otus -p otusSuperPass

    test> show dbs
    admin               100.00 KiB
    config               12.00 KiB
    local                72.00 KiB
    sample_airbnb        51.47 MiB
    sample_analytics      9.51 MiB
    sample_geospatial   812.00 KiB
    sample_mflix         28.37 MiB
    sample_supplies     968.00 KiB
    sample_training      61.02 MiB
    sample_weatherdata    2.55 MiB

5. Подключение к тестовым бд и тестовые запросы на выборку

    test> use sample_airbnb
    switched to db sample_airbnb
  sample_airbnb> db.getCollection('listingsAndReviews') .find({ $and: [{ property_type: 'Apartment'}, { 'bedrooms': { $gte: 3 } } ]}).limit(5)

  Найдем 10 вариантов с TV и WiFI
  sample_airbnb> db.listingsAndReviews.find( { amenities: { $all: ["TV", "Wifi"] } }, { listing_url: 1, name: 1, amenities: 1, host: 1 } ).limit(10)

  Найти варианты с 3+ проверками размешения

  db.listingsAndReviews.aggregate([ { $match: { "host.host_verifications": { $exists: true }, $expr: { $gte: [{ $size: "$host.host_verifications" }, 3] } } }, { $project: { "listing_url": 1, "name": 1, "address": 1, "host.host_verifications": 1, "host_verifications_count": { $size: "$host.host_verifications" } } }] )

Обновим депозит со <100 до 1:
sample_airbnb> db.listingsAndReviews.updateMany( { security_deposit: { $lt: 100 } }, { $set: { security_deposit: 100, minimum_nights: 1 } } )

Результат обновления в ответе:
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1291,
  modifiedCount: 1291,
  upsertedCount: 0
}